from bourbon.job cimport Job, BourbonObject

cdef extern from "Python.h":
	struct PyObject:
		pass
		
cdef class Simulator

cdef class Reporter(BourbonObject):
	cdef int _step
	
	cpdef int step(self)
	
	cpdef set_step(self, int step)
	
	cpdef start(self, Simulator ps)

	cpdef record(self, Simulator ps)

	cpdef finish(self, Simulator ps)
	
	cpdef object results(self)
	
	cpdef object params(self)
	
	
cdef class Simulation(Job):
	cdef Simulator _simulator
	cdef object _reporters
	cdef PyObject** _creporters
	cdef int _num_reporters
	
	cpdef Simulator simulator(self)
	
	cpdef set_simulator(self, Simulator ps)
	
	cpdef add_reporter(self, Reporter r)
	
	cpdef reporters(self)
	
	cpdef object results(self)
	
	cpdef object params(self)
	
	cpdef int start(self)
	
	cpdef int finalize(self)

	cpdef int record(self)

	cpdef int check(self)

	cdef _create_reporters(self)
	
	
cdef class Simulator(BourbonObject):
	cdef Simulation _simulation
	
	cdef void set_simulation(self, Simulation ex)
	
	cpdef int clock(self)
	